// components/search/index.js
import paginationBev from '../behaviors/paginations.js';
import KeywordModel from '../models/keyword.js';
import BookModel from '../../models/book.js';
const keywordModel = new KeywordModel();
const bookModel = new BookModel();
Component({
  behaviors: [paginationBev],
  /**
   * 组件的属性列表
   */
  properties: {
    more: {
      type: String,
      observer: 'loadMore',   // 在属性发生变化时，触发。第一次传值进来时，也会触发。
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    searchValue: '',    // 搜索的关键字
    saveText: '',   // 保存搜索的关键字，用于发起请求
    historyWords: [],   // 历史搜索的关键字数组
    hotWords: [],
    searching: false,   // 是否暂时搜索结果页面
    loading: false,   // 当前状态是否处于发起请求的状态
    loadingCenter: false,  // 搜索时，是否显示加载页
  },

  attached() {
    keywordModel.getHot().then(res => {
      this.setData({hotWords:res.hot})
    })
    this.setData({historyWords:keywordModel.getHistory()})
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 页面滑至底部时，加载更多内容
    loadMore() {
      let text = this.data.saveText;
      if(!text) return;
      if(this.isLocked()) return; 
      // this.data.loading = true;  // 2、否则，当没有书籍可加载时，在外面上锁，if语句又进不去。导致程序永远上锁。
      if (this.hasMore()) {
        // this.data.loading = true;   // 1、只有在还有更多书籍可加载时，才可以上锁。
        this.locked();
        bookModel.search(this.getCurrentStart(), text).then(res => {
          this.setMoreData(res.books);
          this.unLocked();
        }).catch(() => {
          this.unLocked();
        })
      }
    },

    // 点击搜索框的取消时，隐藏搜素页面
    onCancel(event) {
      this.initialize();
      this.triggerEvent('cancel', {});
    },
    // 点击 X 按钮时，关闭搜索结果页面，显示搜索页
    onDelete(event) {
      this.initialize();
      this._closeResult();
      this.setData({searchValue:''});
    },

    // 在搜素框中输入文字并点击回车时 
    onConfirm(event){
      let value = event.detail.value || event.detail.text;
      this.initialize();
      this._showLoadingCenter();
      this._showResult();
      bookModel.search(0, value).then(res => {
        this.setMoreData(res.books)
        this.setTotal(res.total);
        this.setData({searchValue:value, saveText:value});
        keywordModel.addToHistory(value);
        this._hideLoadingCenter();
      })
    },

    // 书籍搜索中时，显示加载中的页面(中间一个点的那个页面)
    _showLoadingCenter() {
      this.setData({loadingCenter:true});
    },
    _hideLoadingCenter() {
      this.setData({loadingCenter:false});
    },
    // 显示搜素结果页面
    _showResult() {
      this.setData({searching:true});
    },
    _closeResult() {
      this.setData({searching:false});
    },
    
  }
})
